//class Solution {
//public:
//    int minFallingPathSum(vector<vector<int>>& matrix) {
//        int n = matrix.size();
//        vector<vector<int>> dp(n + 1, vector<int>(n + 2, INT_MAX));
//        for (int i = 0; i <= n + 1; i++)
//        {
//            dp[0][i] = 0;
//        }
//        for (int i = 1; i <= n; i++)
//        {
//            for (int j = 1; j <= n; j++)
//            {
//                int x = dp[i - 1][j - 1];
//                int y = dp[i - 1][j];
//                int z = dp[i - 1][j + 1];
//                int t = min(x, y);
//                dp[i][j] = min(t, z) + matrix[i - 1][j - 1];
//            }
//        }
//        int ret = INT_MAX;
//        for (int i = 1; i <= n; i++)
//        {
//            if (dp[n][i] < ret) ret = dp[n][i];
//        }
//        return ret;
//    }
//};

